import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
// 自动引入elePuls
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
// 排除 element vue 打包 使用cnd服务加载
import externalGlobals from 'rollup-plugin-external-globals'
// 开启gzip压缩
import viteCompression from 'vite-plugin-compression'

// https://vitejs.dev/config/
export default defineConfig({
	base: './',

	plugins: [
		vue(),
		AutoImport({
			resolvers: [ElementPlusResolver()],
		}),
		Components({
			resolvers: [ElementPlusResolver()],
		}),
		viteCompression({
			verbose: true,
			disable: false,
			threshold: 10240,
			algorithm: 'gzip',
			ext: '.gz',
		}),
	],
	resolve: {
		alias: {
			'@': path.resolve(__dirname, 'src'),
		},
	},
	css: {
		// 指定传递给 CSS 预处理器的选项
		preprocessorOptions: {
			scss: {
				// 全局注册main.scss文件
				additionalData: '@import "@/assets/style/main.scss";',
			},
		},
	},

	server: {
		host: '0.0.0.0',
		port: 8000,
		open: true,
		https: false,
		proxy: {},
	},

	build: {
		// 资源路径
		assetsDir: './static',
		// chunk 大小警告的限制（以 kbs 为单位）
		chunkSizeWarningLimit: 500,
		// 是否生成映射文件
		sourcemap: true,
		// 压缩混淆
		minify: 'terser',
		// 启用/禁用 CSS 代码拆分
		cssCodeSplit: false,
		// 默认情况下，若 outDir 在 root 目录下，则 Vite 会在构建时清空该目录。
		emptyOutDir: true,
		// 启用/禁用 brotli 压缩大小报告
		brotliSize: true,
		terserOptions: {
			compress: {
				// warnings: false,
				drop_console: false, // 打包时删除console
				drop_debugger: true, // 打包时删除 debugger
				pure_funcs: ['console.log'],
			},
		},
		rollupOptions: {
			external: ['vue', 'element-plus'],
			plugins: [externalGlobals({ vue: 'Vue', 'element-plus': 'ElementPlus' })],
		},
	},
})
